package java_DesignPattern.SixPrinciple.DependencyInversionPrinciple.My1;

/**
 * 电脑类
 */
public class Computer implements AssembleComputer {

    /*此处代码逻辑被锁死，只能设置IntelCPU、KingstonMemory、XJHardDisk这三种组件,如果要添加其他组件，需要修改此处代码
    为了扩展其他组件，需要声明为更高的接口抽象吗,如让具体的CPU,如IntelCPU去实现CPU接口向更高的抽象层抽象,通过多态保持拓展性,开闭原则*/
//    //电脑组件
//    private IntelCPU cpu;
//    private KingstonMemory memory;---------------->原有代码
//    private XJHardDisk hardDisk;

    //升级后的电脑组件
    private CPU cpu;
    private Memory memory;
    private HardDisk hardDisk;

     //设置电脑组件方法
    @Override
    public <T> void set(T t) {
        if (t instanceof CPU){
            cpu = (CPU) t;
        }else if (t instanceof Memory){
            memory = (Memory) t;
        }else if (t instanceof HardDisk){
            hardDisk = (HardDisk) t;
        }
    }

     //运行电脑方法
    public void run(){
        cpu.run();
        memory.read("数据");
        memory.save("数据");
        hardDisk.read("数据");
        hardDisk.save("数据");
    }
}
